/*
 * Nome do arquivo: RecebeDadosCooperativa.java
 * Autores:	Bruno Villas Bôas           - 317527
 *              Diego Zamboni               - 344990
 *              Endel Guimarães             - 379930
 * 		Guilherme Torres            - 400572
 *		Renan Oliveira              - 380113
 * 
 * Turma: 2012/1
 *
 * Descricao: Servlet responsável pelo gerenciamento de Cooperativas
 *
 * Data de conclusao: 
*/

package cooper.classes.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.jmx.remote.internal.ArrayQueue;
import cooper.classes.bean.CooperativaBean;
import cooper.classes.dao.CooperDAOException;
import cooper.classes.dao.CooperativaDAO;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;

public class RecebeDadosCooperativa extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        String acao = request.getParameter("acao");

        if (acao.compareTo("cadastrar") == 0) 
        {
            try {
                acaoCadastrar(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosCooperativa.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("alterar") == 0)
        {
            try {
                acaoAlterar(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosCooperativa.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("remover") == 0)
        {
            try {
                acaoRemover(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosCooperativa.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("consultar") == 0) 
        {
            String nome = request.getParameter("keyword");
            acaoConsultar(request, response, nome);
        }
    }
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String acao = request.getParameter("acao");

        if(acao.compareTo("consultar") == 0) 
        {
            String nome = request.getParameter("keyword");
            acaoConsultar(request, response, nome);
        }else if(acao.equals("remover")){
          try {
                acaoRemover(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosCooperativa.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    
    private void acaoCadastrar(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        CooperativaBean objCooperativa = new CooperativaBean();     
        
        
        objCooperativa.setResponsavel(request.getParameter("responsavel"));
        objCooperativa.setNome(request.getParameter("nome"));
        objCooperativa.setRua(request.getParameter("rua"));
        objCooperativa.setNumero(request.getParameter("numero"));
        objCooperativa.setBairro(request.getParameter("bairro"));
        objCooperativa.setCidade(request.getParameter("cidade"));
        objCooperativa.setEstado(request.getParameter("estado"));
        objCooperativa.setCnpj(request.getParameter("cnpj"));
        objCooperativa.setIe(request.getParameter("ie"));
        objCooperativa.setEmail(request.getParameter("email"));
        
        
        // Seta a lista de telefones da cooperativa
        objCooperativa.setTelefone(request.getParameter("telefone"));
        
        bean = objCooperativa;
        String html="";

        // Instanciando a COOPERATIVA e permitindo que ela seja vista na view
        try 
        {
            CooperativaDAO entidade = new CooperativaDAO();
            int idCooperativa = entidade.cadastrar(objCooperativa);
            bean.setId(idCooperativa);
            //request.setAttribute("cooperativaBean", objCooperativa);
            //html = "Sucesso " + request.getParameter("nome");
            HttpSession session = request.getSession();
            session.setAttribute("tipoUsuario", "cooperativa");
            session.setAttribute("idUsuario", idCooperativa);
            session.setAttribute("bean", bean);
            session.setAttribute("nomeUsuario", bean.getNome());
        }
        catch(CooperDAOException e)
        {
            request.setAttribute("cooperativaBean", null);
            html = "Erro: " + e.getMessage();
        }

        response.sendRedirect("indexcoop.jsp?cadastro=ok");
    }

    private void acaoAlterar(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        CooperativaBean objCooperativa = new CooperativaBean();
        
        objCooperativa.setId(Integer.parseInt(request.getParameter("id")));
        objCooperativa.setResponsavel(request.getParameter("responsavel"));
        objCooperativa.setNome(request.getParameter("nome"));
        objCooperativa.setRua(request.getParameter("rua"));
        objCooperativa.setNumero(request.getParameter("numero"));
        objCooperativa.setBairro(request.getParameter("bairro"));
        objCooperativa.setCidade(request.getParameter("cidade"));
        objCooperativa.setEstado(request.getParameter("estado"));
        objCooperativa.setCnpj(request.getParameter("cnpj"));
        objCooperativa.setIe(request.getParameter("ie"));
        objCooperativa.setEmail(request.getParameter("email"));
        
        objCooperativa.setTelefone(request.getParameter("telefone"));
        
        try
        {
            CooperativaDAO entidade = new CooperativaDAO();
            entidade.alterar(objCooperativa);
            request.setAttribute("cooperativaBean", objCooperativa);
            
            // refletindo as alterações também na session
            HttpSession session = request.getSession();
            session.setAttribute("bean", objCooperativa);
            session.setAttribute("nomeUsuario",objCooperativa.getNome());
        }
        catch(CooperDAOException e)
        {
            request.setAttribute("cooperativaBean", null);
        }

        response.sendRedirect("indexcoop.jsp?atualizacao=ok");
    }
    
     private void acaoRemover(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        CooperativaBean objCooperativa = new CooperativaBean();
        HttpSession session = request.getSession();
        objCooperativa.setId(Integer.parseInt(session.getAttribute("idUsuario").toString()));
        
        try
        {
            CooperativaDAO entidade = new CooperativaDAO();
            entidade.remover(objCooperativa);
            request.setAttribute("cooperativaBean", objCooperativa);
        } 
        catch(CooperDAOException e)
        {
            request.setAttribute("cooperativaBean", null);
        }
        session.removeAttribute("idUsuario");
        session.removeAttribute("bean");
        session.removeAttribute("tipoUsuario");
        // Tem que redirecionar para o view certo
        response.sendRedirect("index.jsp"); 
    }
    
   private void acaoConsultar(HttpServletRequest request, HttpServletResponse response, String nome)
                        throws ServletException, IOException 
    {
        try
        {
            // Não está fazendo paginação
            // Esse é um protótipo
            
            CooperativaDAO cooperativa = new CooperativaDAO();
            int pagina;
            try{
              pagina = Integer.parseInt(request.getParameter("page"));
            }catch(Exception e){
              pagina = 1;
            }
            ArrayList<CooperativaBean> novo = cooperativa.consultar(nome,pagina-1);
            
            int total = cooperativa.getTotal();
            
            request.setAttribute("total", total);
            request.setAttribute("cooperativaBean", novo);
        }
        catch(Exception sqle)
        {
                request.setAttribute("cooperativaBean", null);
                request.setAttribute("msg", sqle.getMessage());
        }
        
        RequestDispatcher rd = null;
        
        // Tem que redirecionar para o view certo
        rd = request.getRequestDispatcher("/indexprest.jsp");
        rd.forward(request,response);
    }
   
   @Override
   public void init(ServletConfig sc){
     bean = new CooperativaBean();
     bean.setId(1);
   }
   
   public CooperativaBean bean;
}

